//路由鉴权
import router from "./router";
//@ts-ignore
import nprogress from "nprogress";
import "nprogress/nprogress.css";
nprogress.configure({ showSpinner: false });
//获取用户相关小仓库内部的token数据
import useUserStore from "./store/modules/user";
import pinia from "./store";
import setting from "./setting";
let userStore = useUserStore(pinia);
//全局前置守卫:项目当中任意路由切换都会触发的钩子
router.beforeEach(async (to, from, next) => {
  document.title = setting.title + "-" + to.meta.title;
  nprogress.start();
  //获取token，判断用户是否登录
  let token = userStore.token;
  //获取用户名字
  let username = userStore.username;

  if (token) {
    if (to.path == "/login") {
      next({ path: "/" });
    } else {
      //有用户信息
      if (username) {
        // 放行
        next();
      } else {
        // 如果没有用户信息，在守卫这发送请求获取用户信息再放行
        try {
          await userStore.userInfo();
          //万一：刷新的时候是异步路由，有可能获取用户信息，异步路由还没加载完毕，出现空白
          next({ ...to });
        } catch (error) {
          //token过期或用户手动修改了本地存储token
          await userStore.userLogout();
          next({ path: "/login", query: { redirect: to.path } });
        }
      }
    }
  } else {
    if (to.path == "/login") {
      next();
    } else {
      next({
        path: "/login",
        query: {
          redirect: to.path,
        },
      });
    }
  }
});

//全局后置守卫
router.afterEach((to, from) => {
  nprogress.done();
});

//进度条业务--nprogress
//路由组件访问权限设置
// 用户未登录：可以访问login。其余的不行
// 用户登录：不可以访问login【指向首页】。其余的行
